工作流程: 1.问题定义 2.获取训练集和测试集 3.清洗数据,做好准备 4.分析并识别模式,探索数据 5.建立模型,预测并解决问题 6.可视化解决问题的步骤以及最终的解决方案 7.提交答案
工作目标:分类,将样本进行分类,考虑其与目标类的相关性;相关性,特征与目标的相关性;转换,将特征值转化为符合模型的类型;补充,补充存在的缺失值;修正,修正错误的特征值;创造,创造新的特征值;图表化,选择正确的图表。
开始真正的测试
In [1]:
# data analysis and wrangling
import pandas as pd
import numpy as np
import random as rnd
# visualization
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
# machine learning
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC, LinearSVC
from sklearn.ensemble import RandomForestClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.linear_model import Perceptron
from sklearn.linear_model import SGDClassifier
from sklearn.tree import DecisionTreeClassifier
获取数据集
In [2]:
train_df = pd.read_csv(r'E:\song_ws\data\kaggle\Titanic\train.csv')
test_df = pd.read_csv(r'E:\song_ws\data\kaggle\Titanic\test.csv')
combine = [train_df, test_df]
数据集的特征
In [3]:
print(train_df.columns.values)
PassagerId:乘客Id编号,没有实际意义 Survived:乘客最后是否存活,0代表No,1代表Yes Pclass:船票等级,1代表高级Upper,2代表中级Middle,3代表低级Lower Sex: 性别 Age:年龄,代为年,如果小于1,则年龄是小数,如果年龄是估算的,则可能是xx.5的形式 SibSp:在船上的兄弟或者配偶,Sibling包括兄弟,姐妹,法律意义上的兄弟姐妹 Parch:在船上的父母或者孩子 Ticket:船票的编号 Fare:旅客票价 Cabin:船舱号 Embarked:登陆港口,C代表Cherbourg,Q代表Queenstown,S代表Southampton
Categorical 特征:Survived,Sex,Embarked,Ordinal:Pclass。 Continue 特征:Age,Fare,Discrete:SibSp,Parch
In [4]:
# preview the data
train_df.head()
Out[4]:
In [5]:
train_df.tail()
Out[5]:
In [6]:
train_df.info()
print('_'*40)
test_df.info()
Ticket是数字加字母的混合数据,Cabin是字母连着数字。 Name有可能存在拼写错误。 训练集中Cabin>Age>Embarked存在缺失值 测试集中Cabin>Age存在缺失值。
数据的分布情况
In [7]:
train_df.describe()
Out[7]:
In [8]:
train_df.describe(include=['O'])
Out[8]:
分析特征
In [9]:
train_df[['Pclass', 'Survived']].groupby(['Pclass'], as_index=False).mean().sort_values(by='Survived', ascending=False)
Out[9]:
In [10]:
train_df[["Sex", "Survived"]].groupby(['Sex'], as_index=False).mean().sort_values(by='Survived', ascending=False)
Out[10]:
In [11]:
train_df[["SibSp", "Survived"]].groupby(['SibSp'], as_index=False).mean().sort_values(by='Survived', ascending=False)
Out[11]:
In [12]:
train_df[["Parch", "Survived"]].groupby(['Parch'], as_index=False).mean().sort_values(by='Survived', ascending=False)
Out[12]:
In [13]:
train_df[['Embarked', 'Survived']].groupby(['Embarked'], as_index=False).mean().sort_values(by='Survived', ascending=False)
Out[13]:
1.Pclass不同的类别明显拥有不同的存活概率,等级越高,存活率越大 2.Sex:明显女性的存活率远高于男性 3.Sibsp和Parch对存活率没有明显的相关性 4.Embarked:不同的港口登陆存活率稍微有些差别,C港口的存活率明显高一些。
In [14]:
g = sns.FacetGrid(train_df, col='Survived')
g.map(plt.hist, 'Age', bins=20)
Out[14]:
1.婴儿有较高的存活率 2.八十岁的老人都存活了 3.大部分的乘客在15-35之间 4.死亡率最大的在15-25之间
In [15]:
# grid = sns.FacetGrid(train_df, col='Pclass', hue='Survived')
grid = sns.FacetGrid(train_df, col='Survived', row='Pclass', size=2.2, aspect=1.6)
grid.map(plt.hist, 'Age', alpha=.5, bins=20)
grid.add_legend()
Out[15]:
1.大部分的乘客都是pclass=3,但是死亡率最高 2.Pclass=2的婴儿都存活了 3.大部分的pclass=1的人存活了
In [16]:
grid = sns.FacetGrid(train_df, row='Embarked', size=2.2, aspect=1.6)
grid.map(sns.pointplot, 'Pclass', 'Survived', 'Sex', palette='deep')
grid.add_legend()
Out[16]:
1、女人的存活率普遍高于男性 2、在Embarked=C中,女性存活率低于男性,不能代表Embarked和Survived有直接关系 3、Embarked不同,存活率也是不同
In [17]:
grid = sns.FacetGrid(train_df, row='Embarked', col='Survived', size=2.2, aspect=1.6)
grid.map(sns.barplot, 'Sex', 'Fare', alpha=.5, ci=None)
grid.add_legend()
Out[17]:
In [ ]: